package com.mdd.common.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.Set;

/**
 * @author lrc
 * @date 2022/4/30
 */
public class JsonUtil {

    public static void convert(Object obj) {
        if (obj instanceof JSONArray) {
            JSONArray jsonArray = (JSONArray) obj;
            for (Object json : jsonArray) {
                convert(json);
            }
        } else if (obj instanceof JSONObject) {
            JSONObject json = (JSONObject) obj;
            Set<String> keySet = json.keySet();
            String[] keyArray = keySet.toArray(new String[keySet.size()]);
            for (String key : keyArray) {
                Object value = json.get(key);
                String[] keyStrs = key.split("_");
                if (keyStrs.length > 1) {
                    StringBuilder sb = new StringBuilder();
                    for (int i = 0; i < keyStrs.length; i++) {
                        String keyStr = keyStrs[i];
                        if (!keyStr.isEmpty()) {
                            if (i == 0) {
                                sb.append(keyStr);
                            } else {
                                int c = keyStr.charAt(0);
                                if (c >= 97 && c <= 122) {
                                    int v = c - 32;
                                    sb.append((char) v);
                                    if (keyStr.length() > 1) {
                                        sb.append(keyStr.substring(1));
                                    }
                                } else {
                                    sb.append(keyStr);
                                }
                            }
                        }
                    }
                    json.remove(key);
                    json.put(sb.toString(), value);
                }
                convert(value);
            }
        }
    }

    /**
     * 将json字符串中的key名称中包含下划线的字段，转成驼峰命名格式
     *
     * @param str String格式的JSON串
     * @return 转换后的对象（可能是JSONObject或JSONArray）
     */
    public static Object convertUnderlineToCamelCase(String str) {
        Object obj = JSON.parse(str);
        convert(obj);
        return obj;
    }

    public static void main(String[] args) {
        String json = "{\"namespaces\":[{\"self_auth\":{\"user_id\":\"050b12577f00269a1fcfc01f65239697\",\"auth\":7,\"user_name\":\"user\"},\"auth\":7,\"name\":\"group\",\"creator_name\":\"username\",\"id\":1343008,\"others_auths\":[{\"user_id\":\"06d89c3b6d800f2d1f28c01f0d882285\",\"auth\":1,\"user_name\":\"user_01\"},{\"user_id\":\"050b12577f00269a1fcfc01f65239697\",\"auth\":7,\"user_name\":\"user\"}]}]}";
        json= "{\"output\":{\"choices\":[{\"finish_reason\":\"stop\",\"message\":{\"role\":\"assistant\",\"content\":\"快速赚钱的方法有很多，但需要结合个人能力、资源和风险承受能力来选择。以下是一些合法且可行的途径，但请务必注意风险，避免涉及诈骗、传销或其他违法行为。\\n\\n---\\n\\n### **一、低门槛的短期赚钱方式**\\n1. **体力劳动类**  \\n   - **兼职配送**：送外卖、快递、跑腿（如美团、饿了么、闪送）。  \\n   - **临时工**：商场促销、展会协助、活动搭建（关注本地兼职公众号或平台）。  \\n   - **代驾/司机**：利用下班时间接单（如滴滴代驾、货拉拉）。\\n\\n2. **出售闲置物品**  \\n   - 清理家中闲置物品，在二手平台（闲鱼、转转）出售。  \\n   - 回收旧手机、书籍、电子产品等（爱回收、多抓鱼）。\\n\\n3. **线上任务变现**  \\n   - **问卷调查**：参与付费问卷（如问卷星、腾讯问卷）。  \\n   - **试玩/测试**：APP试玩、游戏代练（需注意平台可靠性）。  \\n   - **数据标注**：为AI公司标注图片或语音数据（适合零散时间）。\\n\\n---\\n\\n### **二、技能/知识变现**\\n1. **自由职业**  \\n   - 写作、翻译、设计、编程等（平台：Upwork、Fiverr、猪八戒网）。  \\n   - 短视频剪辑、配音（抖音、快手服务商）。  \\n   - 摄影/摄像：婚礼跟拍、活动拍摄。\\n\\n2. **知识付费**  \\n   - 开设线上课程（如知乎Live、小鹅通）。  \\n   - 提供咨询或辅导（法律、留学、职业规划等）。  \\n   - 写电子书或专栏（知乎、公众号）。\\n\\n3. **自媒体/内容创作**  \\n   - 短视频（抖音、B站）：通过广告分成或带货变现。  \\n   - 直播：才艺、游戏、聊天（打赏或签约）。  \\n   - 知乎好物、小红书种草：通过带货分佣金。\\n\\n---\\n\\n### **三、投资/套利类（需谨慎！）**\\n1. **短期套利**  \\n   - 抢购限量商品（球鞋、潮玩、演唱会门票）转卖。  \\n   - 跨平台差价倒卖（如电商平台与线下市场）。\\n\\n2. **投资理财**  \\n   - 股票/基金短线操作（高风险，需专业知识）。  \\n   - 加密货币波动交易（风险极高，谨慎参与）。  \\n   - 国债逆回购、货币基金（低风险，收益稳定但低）。\\n\\n---\\n\\n### **四、长期积累的副业模式**\\n1. **电商/带货**  \\n   - 无货源电商（1688代发，通过拼多多、淘宝销售）。  \\n   - 社交电商（分销平台商品，如京东芬香、淘宝客）。\\n\\n2. **线下服务**  \\n   - 家政清洁、宠物寄养、搬家服务。  \\n   - 摆摊（小吃、手工艺品、节日商品）。\\n\\n3. **技术类副业**  \\n   - 开发小程序/网站接单。  \\n   - 维修手机、电脑等电子产品。\\n\\n---\\n\\n### **五、风险提醒**\\n1. **警惕骗局**：所有“轻松赚大钱”的项目（如刷单、赌博、高收益理财）大概率是诈骗。  \\n2. **法律底线**：避免传销、洗钱、虚假宣传等违法行为。  \\n3. **时间成本**：快速赚钱通常需要牺牲时间或体力，长期建议培养技能或副业。\\n\\n---\\n\\n**最后建议**：  \\n- 如果急需用钱，优先考虑正规兼职或小额借贷（如银行、支付宝借呗）。  \\n- 长期来看，提升自身技能（如编程、设计、运营）才能实现稳定收入增长。  \\n- 勿轻信“一夜暴富”，脚踏实地更可靠。\\n\\n希望这些方法对你有帮助，选择适合自己的方向，理性行动！\",\"reasoning_content\":\"嗯，用户问如何快速赚钱，这个问题看起来挺常见的，但需要仔细分析。首先，得考虑用户的需求是什么。可能用户目前有经济压力，急需用钱，或者想找一些赚快钱的方法。不过，快速赚钱通常伴随着风险，所以需要提醒用户注意潜在的问题，比如诈骗或法律风险。\\n\\n接下来，用户的身份可能是什么？可能是学生、上班族，或者待业人员。不同的身份适合不同的赚钱方式。比如学生可能有时间做兼职，而上班族可能更适合利用技能或副业。但用户没有提供更多信息，所以需要给出通用的建议。\\n\\n然后，用户的深层需求可能不仅仅是快速赚钱，而是希望找到可持续的途径，或者他们可能对某些方法不太了解，需要引导。这时候，不仅要列出方法，还要强调风险，帮助他们辨别合法途径。\\n\\n需要区分合法和非法的途径，避免用户误入歧途。例如，诈骗、传销这些虽然可能来钱快，但后果严重，必须明确警告。另外，有些方法虽然合法，但需要时间和技能积累，比如自由职业或自媒体，可能需要用户有耐心。\\n\\n还要考虑不同方法的可行性。比如，送外卖、快递这类体力劳动相对容易入门，但收入可能有限。而投资类的方法虽然可能收益高，但风险也大，特别是加密货币和股票，波动性很高，不适合所有人。\\n\\n另外，用户可能希望快速赚钱，但有些方法可能并不实际，比如出售闲置物品，虽然能快速变现，但取决于用户是否有足够的物品可卖。需要提供多种选项，让用户根据自己的情况选择。\\n\\n最后，要提醒用户不要相信“一夜暴富”的骗局，强调踏实积累的重要性。可能用户被一些虚假广告吸引，需要引导他们理性思考，避免上当受骗。\"}}]},\"usage\":{\"total_tokens\":1209,\"output_tokens\":1203,\"input_tokens\":6},\"request_id\":\"284bca41-0e48-9f06-9222-94e1f65a2a84\"}\n";
        System.out.println(convertUnderlineToCamelCase(json));
    }
}
